#ifndef ENS_H
#define ENS_H

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include "inclusions.h"
/**\file ens.h
 * \brief Gestion des ensembles

 * Le fichier ens.h contient la definition de la structure d'un ensemble
 * de couples ainsi que les definitions des fonctions de creation, de
 * suppression et de manipulation de ces ensembles.
 */

/** Structure qui definit un couple de points
 */
typedef struct {int x; int y;} couple;

/** \struct Ens
 * Un ensemble est compose d'un tableau de couples, d'un entier
 * contenant la taille de l'ensemble et un entier max, par defaut
 * INIT_MAX (contenu dans inclusions.h)
 */
typedef struct strens{couple *v; int taille; int max;}ens,*Ens;

/**
 * Verifie l'egalite de deux couples 
 * \return un booleen
 * \param [in] couple c1
 * \param [in] couple c2
 */
bool MemeCouple(couple c1, couple c2);

/**
 *Alloue la memoire necessaire pour un ensemble
 * \return un ensemble alloue
 * \param -
 */
Ens EnsAlloc();

/**
 * libere la memoire occupee par un ensemble
 * \return -
 * \param [in] ensemble e
 */
void EnsFree(Ens e);

/**
 * teste si un ensemble est vide
 * \return un booleen
 * \param [in] ensemble e
 */
bool EnsEstVide(Ens e);

/**
 * ajoute un couple a un ensemble
 * \return -
 * \param [in] ensemble e
 * \param [in] couple c 
 */
void EnsAjoute(Ens e, couple c);

/**
 * supprime un couple d'un ensemble
 * \return -
 * \param [in] ensemble e
 * \param [in] couple c
 */
void EnsSuppr(Ens e, couple c);

/**
 * teste d'appartenance d'un couple a un ensemble
 * \return un booleen
 * \param [in] ensemble e
 * \param [in] couple c
 */
bool EnsEstDans(Ens e, couple c);

/**
 * renvoie la taille d'un ensemble
 * \return un entier taille
 * \param [in] ensemble e
 */
int EnsTaille(Ens e);

/**
 * tire un couple au hasard dans un ensemble
 * \return un couple
 * \param [in] ensemble e
 */
couple EnsTirage(Ens e);

#endif
